[따배도] - 컨테이너와 컨테이너 이미지의 구조


  • 도커 컨테이너 이미지 구조와 간단한 명령어를 연습합니다.

컨테이너 구조

  • 컨테이너는 하나의 Application 프로세스

    • 즉, 실행중인 상태라고 볼 수 있다.
    • 각각의 컨테이너는 자원을 포함한 모든 것이 겪리되어 있다.
  • 컨테이너가 여러 개가 겪리된 상태로 따로 동작하더라도, 리눅스 커널은 단 하나만 이용하는 것이며 자원 또한 하나의 호스트 OS(리눅스 - 우분투 등)의 자원을 나눠서 사용한다.

    • 자원과 커널을 같은 호스트에서 공유해서 사용하지만, 컨테이너 자체는 독립적인 환경
    • 호스트 OS에서 프로세스는 단 하나로만 취급한다.(도커 엔진)

컨테이너 이미지 구조

  • 실제로 작동하는 상태가 아닌, 애플리케이션을 설계해 놓고, freezing 한 상태라고 볼 수 있다.

    • Read-Only 구조를 가진다.
  • 컨테이너 이미지는 1개 이상의 레이어로 구성될 수 있으며, 하나의 Application이 잘 실행될 수 있도록 모아져 있는 이미지들의 조합이 컨테이너 이미지가 된다.

    • 각각의 Layer들은(하나의 이미지) 각각의 파일들로 저장된다.

이미지 레이어 구조의 용어

  • base image Layer : 환경을 구축할 때 사용 하는 것이며, 여러 개를 쌓기 때문에 계층형이라 부른다.

    • ex) node.js, python etc.. 등 즉, FROM 명령어 부분을 담당
  • source image Layer : 구축된 환경에서 애플리케이션을 실행하기 위한 실제 소스코드
  • 시스템 구조적으로 봤을 때 각각의 Layer들은 UUID 형태로 저장된다.

컨테이너 동작방식

  1. 도커 허브나 회사 허브에서 도커 이미지를 받아온다.

    • 다운 받은 이미지들은 호스트 OS 파일 시스템에 저장된다.
  2. 도커 이미지를 커스터마이징 한다.
  3. 커스터마이징 된 도커 이미지를 생성 및 실행하여 컨테이너로 만든다.

실습

실습 전 아래 명령어를 입력하여 권한 오류를 수정
(기본적으로 설치 시 root 계정만 권한을 가지는 것을 유저에게 할당해주는 것)
sudo chmod 666 /var/run/docker.sock 또는 sudo chown root:docker /var/run/docker.sock

  • 도커 허브에서 이미지 검색

    • 검색은 stars 순으로 나타난다.
$ docker search <찾을 이미지 이름>
  • 컨테이너 이미지 레이어가 저장되는 곳

    • 다운 받은 레이어(각 이미지)들이 모여있는 것을 확인할 수 있다.
    • root 계정으로 확인
$ cd /var/lib/docker/overlay2 && ls -l
  • 공식 nginx 이미지 도커 허브에서 다운로드 후, 이미지 레이어 확인
$ docker pull nginx
$ /var/lib/docker/overlay2: ls -l # 검색해보면 nginx 이미지 구성에 필요한 레이어들을 확인 가능
  • 컨테이너 실행 및 실행중인 컨테이너 확인

    • --name : 컨테이너 이름
    • -d : 데몬으로 실행
    • -p : 포트포워딩
    • nginx : nginx 이미지 사용
$ docker run --name web -d -p 80:80 nginx
$ docker ps # - 실행중인 컨테이너 목록 확인
  • nginx 서비스를 이용해보기

    • 위에서 80 포트를 열어놨으니 curl 명령어를 통해 80 포트로 진입
$ curl localhost:80 # nginx 초기 설정 화면을 볼 수 있음

Hello, I'm@nickhealthy
개발자를 꿈꾸고, 파이썬과 클라우드에 관심이 많은 비전공자

Github